// object 对象
let a : object // 声明一个对象类型,但是 object 类型太广泛,一般不直接使用这个类型
// 更多的是直接使用json格式声明
let b: {name:string}
b = {name:"诸葛亮"}
console.log(b)

let c: {name:string, age:number}
// 这样的情况下,name和age都要定义内容,如果不想要定义age可以给age加?表示可选属性
let d: {name:string, age?:number}
d = {name:"张姗"} // 赋值的时候,age就可以不赋值
console.log(d)

// 同时可以使用 [任意属性名:string] : any 来表示任意字符串key的类型的数据
let f: {name:string, [propName:string]:any} // 这样就可以赋值可选的值,其中propName可以是随意的变量名称
f = {name:"好人", a: 1, b:"kitty"} // 这样就可以定义很多其他的内容

// 使用变量定义函数的参数和返回值
let ff: (a:number, b: string)=>string ; // 这里表示希望ff对应的方法有一个number类型和一个string类型的参数,同时返回值是string
ff = function (c1,c2):string { // 这里在定义这个方法的时候直接就显示了参数的类型
    console.log(c1, c2)
    return "hello" + c2
}

let res = ff(1,"kitty") // 这里调用
console.log(res)

// 数组声明的2种方式
// 1 声明字符串类型的数组 let 变量名:类型名称[]
let strList: string[]
strList = ["1",'3',"gdfg"]
console.log(strList)

// 2 也可以使用 Array<类型> 声明数组
let gList: Array<string>
gList = ["a","b","c"]
console.log(gList)

// 相比于js,ts新增了元组类型 和 枚举类型 enum
let h: [string, number] // 这里就是一个元组
h = ["小明", 10] // 这里就定义了类型必须是字符串和number,也就是固定长度和类型的数组

let i: {name:string, gender:string, age: number}
i = {
    name:"张三", gender: "男", age:19
}
console.log(i)
// 这样类型性别,就可以使用枚举
enum Gender {
    Male = 1,
    Female = 2
}

let k: {name:string, gender:Gender, age:number}
k = {name:"张三",gender:Gender.Male, age:19} //
console.log(k) // { name: '张三', gender: 1, age: 19 }
// 这样就可以直接使用枚举来表示这个数据

// 编译配置 让ts语法有问题就不允许编译,或者编译称为ES6的格式
// "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"],
// 这样写在 tsconfig 文件里面的内容表示 /src 目录下任意目录的任意 .ts .tsx .vue 结尾的文件里面的ts内容都会自动编译成js内容,这样就方便项目的运行
// exclude : ["src/**/*.ts]
// 这里就表示排除不进行编译的目录,但是默认都是不进行自动编译的,所以一般不需要定义

// 修改编译的js格式
/*{
  "compilerOptions": {
    "target": "ES2020",

这里的默认设置的格式是 ES2020(ES11)
ES2015(ES6)  ES2016(ES7) ES2017(ES8) ES2018(ES9) ES2019(ES10)
https://cloud.tencent.com/developer/article/1942714
ES的版本还是比较多的

    */

// 使用 webpack 打包ts

//







